/*
 * Gardien.cpp
 *
 *  Created on: 1 f�vr. 2015
 *      Author: gontranclaritoux
 */

#include "Gardien.h"
#include <iostream>
#include <iomanip>
#include <stdio.h>
#include "string"

using namespace std;

Gardien::Gardien(bool ligne, int j){

	if(!ligne){
		position.ordonnee = 0;
		position.abscisse = j + 1;
	}
	else{
		position.ordonnee = j + 1;
		position.abscisse = 7;
	}
	pion.ligne = ligne;
	pion.numero = j;
}

Gardien::~Gardien() {

}

void Gardien::deplacerImpala(int d, Plateau plat){

	while(d > 0){ //on bouge impala le nombre de cases choisi par le joueur


		if(position.ordonnee == 0){ // i = 0
			if(position.abscisse < 7){ // on est sur une colonne
				position.abscisse++;
				d--;
			}
		}
			else if(position.ordonnee < 6){
				if(position.abscisse == 7)
					position.ordonnee++;
				else
					position.ordonnee--;
				d--;
			}
			else{
				if(position.abscisse < 7 && position.abscisse > 0){ // on est sur une ligne
					position.abscisse--;
					d--;
				}
			}

			/* Cas où Impala se retrouve au niveau des coins, on le fait avancer d'une case selon sa location sur le plateau*/
			if(position.abscisse == 0 ){
				if(position.ordonnee == 0){
					position.abscisse++;
				}
				else if(position.ordonnee == 6){
					position.ordonnee--;
				}
			}
			else if(position.abscisse == 7){
				if(position.ordonnee == 0){
					position.ordonnee++;
				}
				else if(position.ordonnee == 6){
					position.abscisse--;
				}
			}

			remplirPion();

		}
	}



void Gardien::remplirPion(){

	if(position.abscisse != 7 && position.abscisse != 0){
		cout << "Colonne " << position.abscisse << " preuve : " << position.ordonnee << endl;
		pion.ligne = false;
		pion.numero = position.abscisse -1;
	}
	else if(position.ordonnee != 6 && position.ordonnee != 0){
		cout << "Ligne " << position.ordonnee << " preuve : " << position.abscisse << endl;
		pion.ligne = true;
		pion.numero = position.ordonnee -1;
	}
	else if(position.abscisse == 7){
		cout << "Ligne " << position.ordonnee << " preuve : " << position.abscisse << endl;
		pion.ligne = true;
		pion.numero = position.ordonnee - 1;
		//}
	}
	else{
		if(position.ordonnee == 6){
			cout << "Ligne " << (position.ordonnee) << " preuve : " << position.abscisse << endl;
			pion.ligne = true;
			pion.numero = position.ordonnee -1;
		}
		else if(position.ordonnee != 0){
			cout << "Ligne " << (position.ordonnee ) << " preuve : " << position.abscisse << endl;
			pion.ligne = true;
			pion.numero = position.ordonnee -1;
		}
		else{
			//position.abscisse++;
			cout << "Colonne " << (position.abscisse ) << " preuve : " << position.ordonnee << endl;
			pion.ligne = false;
			pion.numero = position.abscisse -1;
		}
	}
}


/*
 * Méthode qui va vérifier qu'une ligne ou une colonne contient au moins une case de libre
 */
bool Gardien::verifCaseLibre(Plateau p, bool ligne, int num){
	int i;

	// Si ligne = true, on vérifie la ligne num
	if(ligne){
		for(i = 1; i < 7; i++){
			if(p.getcase(num, i) -> isCaseVide())
				return true;
		}
	}
	else{
		for(i = 1; i < 6; i++){
			if(p.getcase(i, num)-> isCaseVide())
				return true;
		}
	}

	return false;
}

void Gardien::afficheCasesDispo(Plateau p, bool ligne, int num){
	int i;

	// Si ligne = true, on vérifie la ligne num
	if(ligne){
		cout << "Case disponibles sur la ligne " << num  << ": (i - j)"<< endl;
		for(i = 1; i < 7; i++){
			if(p.getcase(num+1, i)-> isCaseVide())
				cout << num << " - " << (i-1) << endl;
		}
	}
	else{
		cout << "Case disponibles sur la colonne  :" << num << endl;
		for(i = 1; i < 6; i++){
			if(p.getcase(i, num+1)-> isCaseVide())
				cout << (i-1) << " - " << num << endl;
		}
	}
}

/*int main(int argc, char **argv) {
	 /*Position pos; // On va y récupérer la position d'Impala
	 Plateau plat;
	 Gardien gard;
	 bool tmp = false;
	 PlacerPion placerPion;

	 gard.deplacerImpala(3, plat);
	 if(gard.getPion().ligne)
		 cout << "La ligne " << gard.getPion().numero << " a encore des cases vides!! " << endl;
	 else
		 cout << "La colonne " << gard.getPion().numero << " a encore des cases vides!! " << endl;

	 for(int i =0; i <7; i++){
		 //cout << i << endl;
		 plat.getcase(i, 3)-> setCaseVide(false);
		 plat.getcase(i, 3)-> affiche_carac_case() ;
	 }

	 plat.getcase(0, 4)-> setCaseVide(false);

	 tmp = gard.verifCaseLibre(plat, false, 3);

	 if(tmp)
		 cout << "La ligne 3 a encore des cases vides!! " << endl;
	 else{
		 cout << "La ligne 3 n'a plus de case vide!! " << endl;
		 while(!tmp){
			 gard.deplacerImpala(1, plat);
			 tmp = gard.verifCaseLibre(plat, gard.getPion().ligne, gard.getPion().numero);
		 }

		 cout << "Vous pouvez jouer sur la ";
		 if(gard.getPion().ligne)
			 cout << "ligne " << gard.getPion().numero << endl;
		 else
			 cout << "colonne " << gard.getPion().numero << endl;
	 }

	 gard.afficheCasesDispo(plat, gard.getPion().ligne, gard.getPion().numero);

	 //	plat.affiche_Grille();
	 //plat.affiche_y();

	 /*do{// on demande jusqu'à ce que le joueur entre une bonne lettre
			cout << "Voulez vous continuer le jeu ? (o/n)" << endl;
			cin >> repL;
			if(repL != 'o' && repL != 'n')
				cout << "La lettre que vous avez entrée n'est pas bonne !!" << endl;
		}while(repL != 'o' && repL != 'n');*/


	 /*	continuer = false;
	}while(continuer);*/

	/* cout << "Fin du jeu!" << endl;
}*/
